import sys
from io import TextIOWrapper

print(type(sys.stdout))


class Output:  # 模拟输出
    def __init__(self):
        self.text = ''  # 新建空字符串

    def write(self, string):
        self.text += string

    def writelines(self, lines):
        for line in lines: self.write(line)


class Input:  # 模拟输入
    def __init__(self, input=''):  # 默认参数
        self.text = input

    def read(self, size=None):
        if size == None:
            res, self.text = self.text, ''
        else:
            res, self.text = self.text[:size], self.text[size:]
        return res

    def readline(self):
        eoln = self.text.find('\n')
        if eoln == -1:
            res, self.text = self.text, ''
        else:
            res, self.text = self.text[:eoln + 1], self.text[eoln + 1:]
        return res


def redirect(function, pargs, kargs, input):
    save_streams = sys.stdin, sys.stdout  # 暂时保当前的流接口
    sys.stdin = Input(input)  # 将输入流导到自定义的类实例
    sys.stdout = Output()  # 将输出流导到自定义的类实例
    try:
        result = function(*pargs, **kargs)
        output = sys.stdout.text  # 将输出流中的结果保存到output
    finally:
        sys.stdin, sys.stdout = save_streams  # 输出输入流重定向到原来的样子
    return (result, output)


# 已有一个函数test(),内容如下：
def test():
    m = input()
    print('success:', m)
    exec("print('success:test')")


# 测试：

(result, output) = redirect(test, (), {}, '34534')  # 输入的5 加不加换行都可以，即'5'和'5\n'效果一样
print(output)  # print会将换行符转义，输出后 会换行
